<?php

Yii::import('reclamos.models._base.BaseReclamo');

class Reclamo extends BaseReclamo {

    /**
     * @return Reclamo
     */
    public $fechas;

    public static function model($className = __CLASS__) {
        return parent::model($className);
    }

    public static function label($n = 1) {
        return Yii::t('app', 'Reclamo|Reclamos', $n);
    }

    /**
     * @return array customized attribute labels (name=>label)
     */
    public function attributeLabels() {
        return array(
            'id' => Yii::t('app', 'ID'),
            'asunto' => Yii::t('app', 'Asunto'),
            'detalle' => Yii::t('app', 'Detalle'),
            'resolucion' => Yii::t('app', 'Resolución'),
            'estado' => Yii::t('app', 'Estado'),
            'calificacion' => Yii::t('app', 'Calificación'),
            'fecha_creacion' => Yii::t('app', 'Fecha Creación'),
            'fecha_resolucion' => Yii::t('app', 'Fecha Resolución'),
            'fecha_calificacion' => Yii::t('app', 'Fecha Calificación'),
            'id_usuario_estudiante' => Yii::t('app', 'Estudiante'),
            'cedula_estudiante' => Yii::t('app', 'Cédula Estudiante'),
            'id_usuario_resolucion' => Yii::t('app', 'Administrador'),
        );
    }

    public function rules() {
        return array_merge(parent::rules(), array(
            array('resolucion', 'required', 'on' => 'update'),
            array('calificacion', 'required', 'on' => 'calificar'),
        ));
    }

    public function relations() {
        return array(
        );
    }

    public function de_estado($estado) {
        $this->getDbCriteria()->mergeWith(array(
            'condition' => 't.estado = :estado',
            'params' => array(
                ':estado' => $estado
            )
        ));
        return $this;
    }

    public function scopes() {
        return array(
            'filtro_admin' => array(
                'condition' => 't.estado in ("' . Reclamo_Constants::ESTADO_NO_LEIDO . '","' . Reclamo_Constants::ESTADO_REVISADO . '")',
            ),
            'orden_fecha_creacion' => array(
                'order' => 't.fecha_creacion DESC'
            ),
            'orden_estudiantes' => array(
                'order' => 't.fecha_resolucion DESC'
            ),
            'de_estudiante' => array(
                'condition' => 't.id_usuario_estudiante = :id_estudiante',
                'params' => array(':id_estudiante' => Yii::app()->user->id)
            )
        );
    }

    public function getNombreEstudiante() {
        $nombre = null;
        if ($this->id_usuario_estudiante) {
            $usuario = Yii::app()->user->um->loadUserById($this->id_usuario_estudiante);
            $nombre = $usuario->username;
        }
        return $nombre;
    }

    public function getNombreAdministrador() {
        $nombre = null;
        if ($this->id_usuario_resolucion) {
            $usuario = Yii::app()->user->um->loadUserById($this->id_usuario_resolucion);
            $nombre = $usuario->username;
        }
        return $nombre;
    }

    public function getEstadoLabel() {
        foreach (Reclamo_Constants::$estados as $estado) {
            if ($this->estado == $estado['value']) {
                return '<span class="label label-' . $estado['type'] . '">' . $estado['value'] . '</span>';
            }
        }
        return 'Sin estado';
    }

    public function getCalificacionLabel() {
        foreach (Reclamo_Constants::$calificaciones as $calificacion) {
            if ($this->calificacion == $calificacion['value']) {
                return '<span class="label label-' . $calificacion['type'] . '">' . $calificacion['value'] . '</span>';
            }
        }
        return 'Sin Calificación';
    }

    public function searchAdministrador() {
        $criteria = new CDbCriteria;
        $criteria->join = "LEFT JOIN cruge_user on cruge_user.iduser = t.id_usuario_resolucion";
        $criteria->compare('t.asunto', $this->asunto, true, 'OR');
        $criteria->compare('t.estado', $this->estado, true, 'OR');
        $criteria->compare('t.calificacion', $this->calificacion, true, 'OR');
        $criteria->compare('cruge_user.username', $this->id_usuario_estudiante, true, 'OR');
        return new CActiveDataProvider($this, array(
            'criteria' => $criteria,
        ));
    }

    public function searchHistorial() {
        $criteria = new CDbCriteria;
        $criteria->join = "LEFT JOIN cruge_user on cruge_user.iduser = t.id_usuario_resolucion";
        $criteria->compare('t.estado', $this->estado, FALSE, 'AND');
        $criteria->compare('t.calificacion', $this->calificacion, false, 'AND');
        if ($this->fechas) {
            $arrayFechas = explode(' - ', $this->fechas);
            $criteria->addCondition('t.fecha_creacion BETWEEN :fecha_ini AND :fecha_fin', 'AND');
            $criteria->params = array_merge($criteria->params, array(
                ':fecha_ini' => $arrayFechas[0] . ' 00:00:00',
                ':fecha_fin' => $arrayFechas[1] . ' 23:59:59',
            ));
        }
        return new CActiveDataProvider($this, array(
            'criteria' => $criteria,
        ));
    }

}
